package pe.edu.upc.matrix.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import pe.edu.upc.matrix.excepcion.EExcepcionDAO;
import pe.edu.upc.matrix.modelo.MCategoria;
import pe.edu.upc.matrix.modelo.MCompra;
import pe.edu.upc.matrix.modelo.MPersona;
import pe.edu.upc.matrix.modelo.MPublicacion;
import pe.edu.upc.matrix.util.UConexionBD;


public class DCompra extends DBase {
	
	public Collection<MCompra> buscarPorComprador(int idPersona)
			throws EExcepcionDAO {
		String query = "select P.ID_PUBLICACION, P.ID_CATEGORIA, P.ID_PERSONA, P.NO_TITULO, P.NO_DESCRIPCION, "
				+ "P.ID_ESTADO_CONSERVACION, P.QTY_PUBLICACION, P.QTY_STOCK_PUBLICACION, P.ID_ESTADO_STOCK, P.QTY_PRECIO, "
				+ "P.FE_CREACION_PUBLICACION, P.QTY_DURACION_PUBLICACION, P.QTY_CLICK, P.ARC_IMAGEN1, P.ARC_IMAGEN2, P.ARC_IMAGEN3, "
				
				+ "CA.NO_CATEGORIA, CA.DE_CATEGORIA, CA.ID_CATEGORIA_PADRE, "
				
				+ "PE1.ID_TIPO_PERSONA, PE1.NO_PERSONA, PE1.NO_PATERNO, PE1.NO_MATERNO, PE1.ID_SEXO, PE1.ID_TIPO_DOCUMENTO, PE1.NU_DOCUMENTO, PE1.NO_CORREO, PE1.NU_CELULAR, PE1.FE_NACIMIENTO, "
				
				+ "PE.ID_TIPO_PERSONA, PE.NO_PERSONA, PE.NO_PATERNO, PE.NO_MATERNO, PE.ID_SEXO, PE.ID_TIPO_DOCUMENTO, PE.NU_DOCUMENTO, PE.NO_CORREO, PE.NU_CELULAR, PE.FE_NACIMIENTO, "
				
				+ "C.ID_COMPRA, C.ID_PUBLICACION, C.ID_PERSONA, C.QTY_CANTIDAD, C.TXT_COMENTARIO "
				
				+ "from tb_publicacion P, tb_compra C, tb_persona PE, tb_categoria CA, tb_persona PE1 "
				
				+ "where P.ID_PUBLICACION = C.ID_PUBLICACION and C.ID_PERSONA = PE.ID_PERSONA and P.ID_PERSONA = PE1.ID_PERSONA AND P.ID_CATEGORIA = CA.ID_CATEGORIA and C.ID_PERSONA = ?";
		
		Collection<MCompra> lista = new ArrayList<MCompra>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = UConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, idPersona);
			rs = stmt.executeQuery();
			while (rs.next()) {
				MPublicacion mPublicacion = new MPublicacion();
				MCategoria mCategoria = new MCategoria();
				MPersona mPersonaPubl = new MPersona();
				MPersona mPersona = new MPersona();
				MCompra mCompraTemp = new MCompra();
				
				mCategoria.setIdCategoria(rs.getInt("P.ID_CATEGORIA"));
				mCategoria.setNoCategoria(rs.getString("CA.NO_CATEGORIA"));
				mCategoria.setDeCategoria(rs.getString("CA.DE_CATEGORIA"));
				mCategoria.setIdCategoriaPadre(rs.getInt("CA.ID_CATEGORIA_PADRE"));
				
				mPersonaPubl.setIdPersona(rs.getInt("P.ID_PERSONA"));
				mPersonaPubl.setIdTipoPersona(rs.getInt("PE1.ID_TIPO_PERSONA"));
				mPersonaPubl.setNoPersona(rs.getString("PE1.NO_PERSONA"));
				mPersonaPubl.setNoPaterno(rs.getString("PE1.NO_PATERNO"));
				mPersonaPubl.setNoMaterno(rs.getString("PE1.NO_MATERNO"));
				mPersonaPubl.setIdSexo(rs.getInt("PE1.ID_SEXO"));
				mPersonaPubl.setIdTipoDocumento(rs.getInt("PE1.ID_TIPO_DOCUMENTO"));
				mPersonaPubl.setNuDocumento(rs.getString("PE1.NU_DOCUMENTO"));
				mPersonaPubl.setNoCorreo(rs.getString("PE1.NO_CORREO"));
				mPersonaPubl.setNuCelular(rs.getString("PE1.NU_CELULAR"));
				mPersonaPubl.setFeNacimiento(rs.getDate("PE1.FE_NACIMIENTO"));
				
				mPublicacion.setIdPublicacion(rs.getInt("P.ID_PUBLICACION"));
				mPublicacion.setCategoria(mCategoria);
				mPublicacion.setPersona(mPersonaPubl);
				mPublicacion.setNoTitulo(rs.getString("P.NO_TITULO"));
				mPublicacion.setNoDescripcion(rs.getString("P.NO_DESCRIPCION"));
				mPublicacion.setIdEstadoConservacion(rs.getInt("P.ID_ESTADO_CONSERVACION"));
				mPublicacion.setQtyPublicacion(rs.getInt("P.QTY_PUBLICACION"));
				mPublicacion.setQtyStockPublicacion(rs.getInt("P.QTY_STOCK_PUBLICACION"));
				mPublicacion.setIdEstadoStock(rs.getInt("P.ID_ESTADO_STOCK"));
				mPublicacion.setQtyPrecio(rs.getDouble("P.QTY_PRECIO"));
				mPublicacion.setFeCreacionPublicacion(rs.getDate("P.FE_CREACION_PUBLICACION"));
				mPublicacion.setQtyDuracionPublicacion(rs.getInt("P.QTY_DURACION_PUBLICACION"));
				mPublicacion.setQtyClick(rs.getInt("P.QTY_CLICK"));
				mPublicacion.setArcImagen1(rs.getString("P.ARC_IMAGEN1"));
				mPublicacion.setArcImagen2(rs.getString("P.ARC_IMAGEN2"));
				mPublicacion.setArcImagen3(rs.getString("P.ARC_IMAGEN3"));
				
				mPersona.setIdPersona(rs.getInt("C.ID_PERSONA"));
				mPersona.setIdTipoPersona(rs.getInt("PE.ID_TIPO_PERSONA"));
				mPersona.setNoPersona(rs.getString("PE.NO_PERSONA"));
				mPersona.setNoPaterno(rs.getString("PE.NO_PATERNO"));
				mPersona.setNoMaterno(rs.getString("PE.NO_MATERNO"));
				mPersona.setIdSexo(rs.getInt("PE.ID_SEXO"));
				mPersona.setIdTipoDocumento(rs.getInt("PE.ID_TIPO_DOCUMENTO"));
				mPersona.setNuDocumento(rs.getString("PE.NU_DOCUMENTO"));
				mPersona.setNoCorreo(rs.getString("PE.NO_CORREO"));
				mPersona.setNuCelular(rs.getString("PE.NU_CELULAR"));
				mPersona.setFeNacimiento(rs.getDate("PE.FE_NACIMIENTO"));				
				
				mCompraTemp.setIdCompra(rs.getInt("C.ID_COMPRA"));
				mCompraTemp.setPublicacion(mPublicacion);
				mCompraTemp.setPersona(mPersona);
				mCompraTemp.setQtyCantidad(rs.getInt("C.QTY_CANTIDAD"));
				mCompraTemp.setTxtComentario(rs.getString("TXT_COMENTARIO"));
				
				lista.add(mCompraTemp);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new EExcepcionDAO(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		
		return lista;
	}
	
	public MCompra registrarCompra(MCompra compra) throws EExcepcionDAO {
		String query = "insert into tb_compra(ID_PUBLICACION, ID_PERSONA, QTY_CANTIDAD, TXT_COMENTARIO) values (?,?,?,?)";
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = UConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, compra.getPublicacion().getIdPublicacion());
			stmt.setInt(2, compra.getPersona().getIdPersona());
			stmt.setInt(3, compra.getQtyCantidad());
			stmt.setString(4, compra.getTxtComentario());
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo registrar la compra.");
			}
			// Obtener el ultimo id
			int id = 0;
			query = "select last_insert_id()";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			if (rs.next()) {
				id = rs.getInt(1);
			}
			compra.setIdCompra(id);

		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new EExcepcionDAO(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return compra;
	}
}
